// ==================== src/traits/cluster_manager.rs ====================
//! 集群管理trait定义
//!
//! 提供集群节点管理、领导者选举、数据同步等核心功能
//!
//! # 功能特性
//! - 节点管理：支持节点的动态添加、删除和状态更新
//! - 领导者选举：支持Raft等分布式一致性算法
//! - 心跳检测：支持节点间的心跳检测和故障发现
//! - 数据同步：支持集群间的数据同步和一致性保证
//! - 故障转移：支持自动故障检测和领导者切换
//!
//! # 架构设计
//! - 去中心化：支持无中心的集群架构
//! - 高可用：支持多节点冗余和自动故障转移
//! - 一致性：基于Raft算法保证数据一致性
//! - 可扩展：支持动态扩缩容

use async_trait::async_trait;
use crate::{Result, ClusterNode, NodeRole};

/// 集群管理trait
#[async_trait]
pub trait ClusterManager: Send + Sync + std::fmt::Debug {
    /// 获取集群节点列表
    async fn get_cluster_nodes(&self) -> Result<Vec<ClusterNode>>;
    
    /// 获取当前节点
    async fn get_current_node(&self) -> Result<ClusterNode>;
    
    /// 检查是否为领导者
    async fn is_leader(&self) -> Result<bool>;
    
    /// 获取领导者节点
    async fn get_leader(&self) -> Result<Option<ClusterNode>>;
    
    /// 选举领导者
    async fn elect_leader(&self) -> Result<()>;
    
    /// 添加节点
    async fn add_node(&self, node: &ClusterNode) -> Result<()>;
    
    /// 移除节点
    async fn remove_node(&self, node_id: &str) -> Result<()>;
    
    /// 更新节点状态
    async fn update_node_state(&self, node_id: &str, role: NodeRole) -> Result<()>;
    
    /// 发送心跳
    async fn send_heartbeat(&self, target_node: &str) -> Result<()>;
    
    /// 同步数据到其他节点
    async fn sync_data(&self, data: &[u8]) -> Result<()>;
}